package common

type RedisSet struct {
	redis *RedisUtil
	key   string //按键值
}

func NewRedisSet(redis *RedisUtil, key string) *RedisSet {
	return &RedisSet{
		redis: redis,
		key:   key,
	}
}

// 新增内容
func (r *RedisSet) SetValue(value string) int64 {
	ret, err := r.redis.SADD(r.key, []string{value})
	if err != nil {
		return -1
	}
	return ret
}

// 新增内容
func (r *RedisSet) SetValues(value []string) int64 {
	ret, err := r.redis.SADD(r.key, value)
	if err != nil {
		return -1
	}
	return ret
}

// 所有集合
func (r *RedisSet) Values() ([]string, error) {
	return r.redis.SMEMBERS(r.key)
}

// 大小
func (r *RedisSet) Size() int64 {
	ret, err := r.redis.SCARD(r.key)
	if err != nil {
		return 0
	}
	return ret
}

// 判断是否存在
func (r *RedisSet) Has(value string) bool {
	return r.redis.SISMEMBER(r.key, value)
}

// 移除
func (r *RedisSet) RemoveValue(value string) error {
	_, err := r.redis.SREM(r.key, value)
	return err
}

// Pop 移除并返回集合中的一个随机元素
func (r *RedisSet) Pop() (string, error) {
	return r.redis.SPOP(r.key)
}
